#ifndef BINARYTREEGENERATOR_HPP
#define BINARYTREEGENERATOR_HPP

#include <cstdint>
#include <memory>

namespace LEETCODE
{

class BinaryTree;
 
class BinaryTreeNode
{
public:
    std::string Show();
    std::int32_t n {0};
    std::shared_ptr<BinaryTreeNode> left {std::nullptr_t()};
    std::shared_ptr<BinaryTreeNode> right {std::nullptr_t()};
};

class BinaryTree
{
public:
    void PreorderTraversal();
    void InorderTraversal();
    void PostorderTraversal();

    std::shared_ptr<BinaryTreeNode> root { std::nullptr_t() };
};

std::shared_ptr<BinaryTree> BinaryTreeGenerator(std::uint64_t const _nodeNum);

}
#endif
